﻿/*
file js quản lý sổ văn bản
*/
$(document).ready(function () {
    if (typeof (VOFFICE) == "undefined") {
        // ReSharper disable AssignToImplicitGlobalInFunctionScope
        VOFFICE = {};
        // ReSharper restore AssignToImplicitGlobalInFunctionScope
    }

    VOFFICE.ManageDocType = (function () {
        var methods = {};

        methods.DocTypeGrid = null;
        methods.DocTypeForm = null;
        methods.Collection = null;
        methods.BookList = null;

        methods.CustomValidate = {
            errorLabelContainer: "#doctype-form-error",
            rules: {
                Name: { required: true }
            },
            messages: {
                Name: { required: jsResources.lang.ManageDocTypeRequired }
            }
        };

        var $table = $('#list-details');
        var $addNew = $('#add-new');
        var $dialog = $('#doctype-dialog').dialog({
            autoOpen: false,
            show: "fade", //fix ie bug
            hide: "fade",
            modal: true,
            height: 'auto',
            width: 600,
            open: function (event, ui) {
                $('.ui-dialog-titlebar', ui.dialog || ui).hide();
            }
        });


        /*
        Lấy hết sổ văn bản theo phân trang
        */
        var getAllDocType = function () {
            //lấy toàn bộ dữ liệu
            SaveIndicator.indicate($.get('/documenttype/get_all', { nocache: (new Date()).toJSON() }, function (data) {
                if (!!data && data.Status == true) {

                    VH.DateUtility.FixDates(data);
                    $table.find('tbody').remove();
                    var list = new DocTypeCollection();
                    if (data.Result.length > 0) {
                        _.each(data.Result, function (item) {
                            var doctype = new DocType({
                                'id': item.Id,
                                'Name': item.Name,
                                'Description': item.Description,
                                'IsActive': item.IsActive,
                                'IsCommon': item.IsCommon,
                                'BookId': item.BookId,
                                'CreatedAt': item.CreatedAt,
                                'UpdatedAt': item.UpdatedAt,
                                'CreatorId': item.CreatorId,
                                'BookName': item.BookName
                            });
                            list.push(doctype);
                        });
                        $table.fadeIn();
                    }
                    methods.Collection = list;
                    methods.DocTypeGrid = new DocTypeGrid({ collection: list });
                    $table.append(methods.DocTypeGrid.render().el);
                }
            }));
        };

        var getKeyValue = function () {
            $addNew.attr("disabled", "disabled");
            if (!methods.BookList) {
                $.get('/keyvalue/get_book_list', function (data) {
                    if (!!data && data.Status == true) {
                        methods.BookList = data.Result;
                        $addNew.removeAttr('disabled');
                    }
                });
            }
        };
        /*
        Hiển thị dialog để thêm sổ mới
        */
        var addNew = function () {
            //get all data for dropdownlist
            methods.DocTypeForm = new DocTypeForm({ model: new DocType() });
            $dialog.html(methods.DocTypeForm.render().el);
            $('#doctype-form').validate(methods.CustomValidate);
            $dialog.dialog('open');
        };
        /*
        Hiển thị form để sửa một sổ đã tạo
        */
        methods.edit = function (model) {
            methods.DocTypeForm = new DocTypeForm({ model: model });
            $dialog.html(methods.DocTypeForm.render().el);
            $('#doctype-form').validate(methods.CustomValidate);
            $('#doctype-form input[type=')
            $dialog.dialog('open');
        };

        /*
        Hàm cập nhập dữ liệu trên trang sau khi save
        */
        methods.updateGrid = function (model, isNew) {
            $table.fadeIn("fast");
            if (isNew) {
                methods.Collection.add(model, { at: 0 });
            }
            $dialog.dialog('close');
        };

        /*
        Đóng dialog
        */
        methods.closeDialog = function () {
            $dialog.dialog('close');
        };

        /*
        gọi lại hàm validate form sau khi nó bị backbone render lại
        */
        methods.recallValidate = function () {
            $('#doctype-form').validate(methods.CustomValidate);
        };

        // quy ước về hàm khởi tạo
        methods.init = function () {
            $addNew.live('click', addNew);
            $addNew.button().addClass('ui-button-primary');
            getAllDocType();
            getKeyValue();
        };
        return methods;
    })(VOFFICE.ManageDocType);

    //gọi hàm khởi tạo
    VOFFICE.ManageDocType.init();
});

/*
View để thêm mới hay chỉnh sửa book (sổ công văn)
*/
window.DocTypeForm = Backbone.View.extend({

    initialize: function () {
        $('#doctype-form').die('submit');
        $('#doctype-form').live('submit', this.submitDocType);
        //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },

    events: {
        'change .form-select-BookId': 'setCommon',
        'change .form-cbx-IsCommon': 'setCommon'
    },

    /*
    Khi chọn common thì thôi chọn bookId và ngược lại
    */
    setCommon: function (event) {
        var $target = $(event.currentTarget);
        if (!!$target) {
            if ($target.prop('tagName') == "INPUT") {
                if ($target.is(':checked')) {
                    $('.form-select-BookId').val(0);
                } else {
                    $('.form-select-BookId').focus();
                }
            } else {
                if ($target.val() == 0) {
                    $('.form-cbx-IsCommon').attr('checked', 'checked');
                } else {
                    $('.form-cbx-IsCommon').removeAttr('checked');
                }
            }
        }
    },

    /* 
    cập nhập hoặc thêm mới sổ văn bản 
    */
    submitDocType: function (event) {
        event.preventDefault();
        var self = VOFFICE.ManageDocType.DocTypeForm;
        if (!self) {
            VOFFICE.ManageDocType.closeDialog();
        }
        var isNew = self.model.isNew();
        SaveIndicator.indicate(self.model.save({
            'Name': $('#Name').val(),
            'Description': $('#Description').val(),
            'IsActive': $('#IsActive').is(':checked'),
            'IsCommon': $('#IsCommon').is(':checked'),
            'BookId': $('#BookId').val()
        }, {
            success: function (data) {
                if (!!data && data.get('Status') + "" == "true") {
                    VOFFICE.ManageDocType.updateGrid(self.model, isNew);
                } else {
                    VOFFICE.ManageDocType.closeDialog();
                }
            },
            error: function (data) {
                VOFFICE.ManageDocType.closeDialog();
            },
            complete: function () {
                self.close();
            }
        }));
        return false;
    },

    render: function () {
        this.template = _.template($('#doctype-form-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },

    close: function () {
        this.remove();
        this.unbind();
        this.model.unbind("change", this.render, this);
        $('#doctype-form').die('submit', this.submitDocType);
    }
});
/*
Chứa một collection là list các book model
gọi đến BookGridItem để hiển thị dữ liệu
*/
window.DocTypeGrid = Backbone.View.extend({
    tagName: 'tbody',
    render: function () {
        $(this.el).html('');
        var i = 1;
        _.each(this.collection.models, function (doctype) {
            doctype.set({ 'Order': i });
            $(this.el).append((new DocTypeGridItem({ model: doctype })).render().el);
            i++;
        }, this);
        return this;
    },

    /* 
    Khi grid có thêm bản ghi thì cập nhập
    */
    initialize: function () {
        var self = this;
        this.collection.bind("reset", this.render, this);
        this.collection.bind("add", function (book) {
            $(self.el).prepend(new DocTypeGridItem({ model: book }).render().el);
        });
    }
});

/*
từng item trong grid dữ liệu
các item này tạo thành table chứa thông tin tất cả các book có trong hệ thống
*/
window.DocTypeGridItem = Backbone.View.extend({
    tagName: 'tr',

    //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
    initialize: function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },
    /*
    Các sự kiện trên một dòng trong grid 
    */
    events: {
        'click .grid-update-doctype': 'showUpdate',
        'click .grid-delete-doctype': 'deleteDocType'
    },

    /*
    Xóa sổ văn bản
    */
    deleteDocType: function (event) {
        var self = this;
        VH.ConfirmBox(jsResources.ManageDocTypeDeleteConfirm(self.model.get('Name')), jsResources.lang.Delete, jsResources.lang.Cancel,
            function () {
                $.post('/documenttype/delete_doctype', { id: self.model.get('id'), nocache: (new Date()).toJSON() }, function (data) {
                    if (!!data && data.Status == true) {
                        self.close();
                    } else {
                        alert("");
                    }
                });
            },
            function () {
                return true;
            }
        );
    },

    /*
    Hiển thị màn hình để cập nhập sổ văn bản
    */
    showUpdate: function () {
        VOFFICE.ManageDocType.edit(this.model);
    },

    /*
    Kết hợp template và model để hiển thị lên 1 dòng (tr)
    chứa thông tin của 1 sổ văn bản trong grid
    */
    render: function () {
        this.template = _.template($('#list-doctype-item-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },

    close: function () {
        $(this.el).remove();
    }
});